package com.gokzzz.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gokzzz.dto.SysQuartzJobSaveOrUpdateDTO;
import com.gokzzz.dto.SysQuartzJobSearchQueryDTO;
import com.gokzzz.entity.SysQuartzJob;
import com.gokzzz.response.PageData;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Set;

/**
 * @author ganfujia
 * @date 2022/4/22 15:55
 */
@Validated
public interface ISysQuartzJobService extends IService<SysQuartzJob> {
    /**
     * 分页查询
     *
     * @param sysQuartzJobSearchQueryDTO 查询条件
     * @param page                       当前页
     * @param size                       每页显示条数
     * @return 分页数据
     */
    PageData<SysQuartzJob> listJobByPage(@NotNull(message = "查询条件为null") SysQuartzJobSearchQueryDTO sysQuartzJobSearchQueryDTO,
                                         @NotNull(message = "页码为null") Long page,
                                         @NotNull(message = "页数为null") Long size);

    /**
     * 添加定时任务
     *
     * @param sysQuartzJobSaveOrUpdateDTO 定时任务信息
     */
    void saveJob(@Validated({SysQuartzJobSaveOrUpdateDTO.Save.class}) SysQuartzJobSaveOrUpdateDTO sysQuartzJobSaveOrUpdateDTO);

    /**
     * 更新定时任务
     *
     * @param sysQuartzJobSaveOrUpdateDTO 定时任务信息
     */
    void updateJob(@Validated({SysQuartzJobSaveOrUpdateDTO.Update.class}) SysQuartzJobSaveOrUpdateDTO sysQuartzJobSaveOrUpdateDTO);

    /**
     * 删除定时任务
     *
     * @param ids 定时任务id
     */
    void deleteJob(@NotEmpty(message = "定时任务id集合为空") Set<Long> ids);

    /**
     * 暂停定时任务
     *
     * @param id 定时任务id
     */
    void pauseJob(@NotNull(message = "定时任务id为null") Long id);

    /**
     * 恢复定时任务
     *
     * @param id 定时任务id
     */
    void resumeJob(@NotNull(message = "定时任务id为null") Long id);

    /**
     * 立即执行定时任务
     *
     * @param id 定时任务id
     */
    void runJob(@NotNull(message = "定时任务id为null") Long id);
}
